---
title: 特性检测、特性推断和使用 UA 字符串有什么区别？
---

## 特性检测

特性检测涉及确定浏览器是否支持某段代码，并根据是否支持运行不同的代码（或不支持），以便浏览器始终提供工作体验，而不是在某些浏览器中崩溃/出错。例如：

```js
if ('geolocation' in navigator) {
  // 可以使用 navigator.geolocation
} else {
  // 处理缺少的功能
}
```

[Modernizr](https://modernizr.com/) 是一个处理特性检测的好库。

## 特性推断

特性推断像特性检测一样检查特性，但使用另一个函数，因为它假定它也将存在，例如：

```js
if (document.getElementsByTagName) {
  element = document.getElementById(id);
}
```

这真的不推荐。特性检测更万无一失。

## UA 字符串

这是一个浏览器报告的字符串，它允许网络协议对等方识别请求软件用户代理的应用程序类型、操作系统、软件供应商或软件版本。可以通过 `navigator.userAgent` 访问它。但是，该字符串很难解析，并且可以被欺骗。例如，Chrome 报告为 Chrome 和 Safari。因此，要检测 Safari，您必须检查 Safari 字符串以及 Chrome 字符串的缺失。避免使用此方法。
